package com.renl.juc.cas;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author renl
 * @date 2019/12/27
 *
 * 1.CAS:比较并交换
 * 2.自旋锁、unsafe类
 */
public class CASDemo {
  public static void main(String[] args) {
    //1.比较与交换
    compareAndSet();
    //2.底层原理
    /*
    * var1 AtomicInteger对象本身
    * var2 该对象值的引用地址
    * var4 需要变动的数量
    * var5 是用过var1 var2 找出的主内存中真实的值
    * 用该对象当前的值与var5比较
    * 如果相同，更新var5 + var4 并且返回true
    * 如果不同，继续取值然后再比较，直到更新完成
    *
    * */

  }

  private static void compareAndSet() {
    AtomicInteger atomicInteger = new AtomicInteger(5);
    atomicInteger.getAndIncrement();
    System.out.println(atomicInteger.compareAndSet(5,2019) +", value = "+ atomicInteger.get());
    System.out.println(atomicInteger.compareAndSet(5,2020) +", value = "+ atomicInteger.get());
  }
}
